Record the #495 decline, and correct a tier figure that shipped in #499 - #500
Merged
Conversation
…deletion measures The Declined bullet on #495 reached the right conclusion through seven wrong claims. Rewritten on the measurement that actually refuses the criterion, and the five ledger exemptions citing #495 now record its answer instead of posing it. CORRECTS A FIGURE THAT SHIPPED IN #499: the fix(comma-family) routing-rule exemption in expected_since_1.4.0.toml said it explains "eight of which six are contract". It is FIVE. Six is what tiering by file membership gives from a correct _CORPUS_TIERS -- it counts 'John Smith, Dr.' contract because corpus_shapes.jsonl holds a copy, but that copy carries shape 4, whose FAMILY_FIRST order makes it a second (name, order) entry rather than the dedup winner, and shape 4's min_baseline of 2.0.0 skips it at this baseline. The only entry a 1.4.0 run compares for that string is the radar one. Tier in a baseline-scoped claim is a property of the ENTRY the run compared; the general trap is now recorded in the bullet's RECOMPUTE line, where 2 of the 24 both-tier names carry a shape tag and exactly 1 bites at 1.4.0. Measured at baseline 1.4.0 by driving classify() over each of the 48 diffs with its own rule removed: 25 report UNCLASSIFIED and 23 are claimed by ANOTHER rule (26 and 22 with all 19 deleted at once). So for nearly half the population deleting mislabels rather than merely loses -- the rule-broader-than-the-diff absorption decisions.md#H1 and the fields-only arc already name. Also corrected in the bullet: UNEXPLAINED cannot happen on a radar tier (both NOT WANTED names are radar; measured, removing both rules gives unexplained 0, radar unclassified 1); the 19 is a SUPERSET of what #495 proposed deleting, not a different set; the wrong count of 20 came from a repr-parsing bug, not from the report's ten-name truncation, which cannot flip the predicate; feat(#269) and fix(#360) name families, so the rules are named; and the WATCH quote belongs to decisions.md#cjk-comma-demotion. The RECOMPUTE recipe is replaced by one that was run: wrap _run_worker and classify() around an unchanged compare.main() and read tier off entry["tier"], rather than joining names to files by hand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #500 +/- ##
=======================================
Coverage 98.66% 98.66%
=======================================
Files 45 45
Lines 3219 3219
=======================================
Hits 3176 3176
Misses 43 43 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Records the #495 decline, and corrects a figure that shipped in #499.
Why #495 closed as not planned
It asked whether ledger rules that only explain radar-tier names still earn
their place. Measured at baseline 1.4.0, 19 of the 72 explaining rules explain
only radar names — 48 of the 352 intentional diffs. That is not the five the
issue named; it is a SUPERSET of them, containing all three rules #495's own
option 2 proposed deleting.
What kills the criterion is what deletion actually does. Driving
classify()over each of the 48 diffs with its own rule removed: 25 report UNCLASSIFIED
and 23 are claimed by a DIFFERENT rule — nine of
fix(cjk-comma-compound)'seleven land on
fix(cjk-glued-honorific-peel), all seven offix(cjk-comma-honorific-peel)'s land on the compound rule,'Carod i'lands onthe roman-numeral
fix(suffix-routing). So for nearly half the populationdeleting is not merely wasteful, it is a MISLABEL — the rule-broader-than-the-diff
absorption this file already names twice.
The criterion that does justify deleting a rule is that it explains NOTHING,
which
dormantalready names and the dormancy check already enforces.The five
precedes_narrowerexemptions citing #495 described it as a livequestion in the present tense; all five now read as decided. The #496 decline
that leaned on it still stands on its own reasoning — nothing can demand the twin
rule, which is not what #495 settled.
The corrected figure
expected_since_1.4.0.tomlhas said since #499 that the routing rule "explainseight of which six are contract". At baseline 1.4.0 it is five.
Not a mis-map: six is what tiering by FILE MEMBERSHIP gives from a correct
_CORPUS_TIERS.'John Smith, Dr.'sits incorpus_issues.jsonl(radar, noshape) and
corpus_shapes.jsonl(contract, shape 4, FAMILY_FIRST,min_baseline2.0.0). The dedup key is(name, order), so the shape-4 copy is aSECOND entry rather than the dedup winner — verified at baseline 2.0.0, where the
run compares both — and at 1.4.0 it is among the seven the baseline-minimum skip
drops. The only entry a 1.4.0 run compares for that string is the radar one.
Tier, in any claim scoped to a baseline, is a property of the ENTRY that run
compared — not of the files the string appears in. Measured: 24 of the 352
explained names sit in files of both tiers, 2 of those carry a shape tag, and
exactly 1 bites at 1.4.0. File-membership tiering gets 1 of 352 wrong;
entry["tier"]gets it right for free. The radar-only count of 19 is identicalunder either tiering.
Three traps in one measurement, all recorded in the RECOMPUTE recipe
Two of them produced wrong answers during this work:
names[:10], no "and N more" line) — harmless for thispredicate, because contract files load first so contract names occupy the
prefix; first-ten-only still gives 19. Recorded because it looks dangerous.
"'Smitty' Dr. Jones"renders with doublequotes because the name contains single ones, so strip-the-quotes drops
fix(#410)'s only contract name.ast.literal_evalis the fix.the three that changes an answer on this tree.
Verification
Full suite 6467 passed, 156 skipped, 5 xfailed;
ruffclean;mypyclean on 111source files. Gate at all four baselines, exit 0 each: 352 / 247 / 155 / 14
intentional, 0 unexplained, 0 radar-unclassified.
Prose only — no rule,
name_regex,fields,ordersor file order changed.design-docs-reviewerran the eleven axes over the first draft and returned sevenconfirmed findings; this is the rebuild, plus the shape-tag correction found while
fixing one of them.
🤖 Generated with Claude Code